package com.bl.weilan.service.biz.companystockholder.impl;

import com.bl.weilan.common.ApiResponseCode;
import com.bl.weilan.common.CommonServiceException;
import com.bl.weilan.common.utils.UUIDUtils;
import com.bl.weilan.dao.model.CompanyStockholderEntity;
import com.bl.weilan.dao.model.PeopleEntity;
import com.bl.weilan.dao.repository.CompanyStockholderRepository;
import com.bl.weilan.dao.repository.PeopleRepository;
import com.bl.weilan.service.biz.companystockholder.CompanyStockholderService;
import com.bl.weilan.service.vo.DelBody;
import com.bl.weilan.service.vo.DelListBody;
import com.bl.weilan.service.vo.companystockholder.CompanyStockholderAddVo;
import com.bl.weilan.service.vo.companystockholder.CompanyStockholderListVo;
import com.bl.weilan.service.vo.companystockholder.CompanyStockholderModVo;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.util.Date;

@Service
@Log4j2
public class CompanyStockholderServiceImpl implements CompanyStockholderService {
    @Autowired
    CompanyStockholderRepository companystockholderRepository;

    @Autowired
    PeopleRepository peopleRepository;

    @Override
    public CompanyStockholderEntity getCompanyStockholderById(String companystockholderId) {
        CompanyStockholderEntity companystockholderEntity = companystockholderRepository.findOne(companystockholderId);
        return companystockholderEntity;
    }

    @Override
    public CompanyStockholderListVo getCompanyStockholderLists(String companyId, Pageable pageable ){
        Page<CompanyStockholderEntity> companystockholderEntities;
        CompanyStockholderListVo companystockholderListVo = new CompanyStockholderListVo();

        companystockholderEntities = companystockholderRepository.findByCompanyId(companyId,pageable);


        companystockholderListVo.setTotalCount(companystockholderEntities.getTotalElements());
        companystockholderListVo.setList(companystockholderEntities.getContent());

        return companystockholderListVo;
    }

    @Override
    public void addCompanyStockholder(CompanyStockholderAddVo companystockholderAddVo) {
        CompanyStockholderEntity companystockholderEntity = new CompanyStockholderEntity();
        companystockholderEntity.setId(UUIDUtils.getUUID());
        BeanUtils.copyProperties(companystockholderAddVo, companystockholderEntity);
        PeopleEntity peopleEntity = peopleRepository.findByName(companystockholderAddVo.getName());
        if (peopleEntity == null) {
            peopleEntity = new PeopleEntity();
            peopleEntity.setId(UUIDUtils.getUUID());
            peopleEntity.setUpdateTime(new Date());
            peopleEntity.setCreateTime(new Date());
            peopleEntity.setName(companystockholderAddVo.getName());
            peopleRepository.save(peopleEntity);
        }
        companystockholderEntity.setPeopleId(peopleEntity.getId());
        companystockholderEntity.setCreateTime(new Date());
        companystockholderEntity.setUpdateTime(new Date());
        companystockholderRepository.save(companystockholderEntity);

    }

    @Override
    public void del(DelBody id) {
        companystockholderRepository.delete(id.getId());
    }

    @Override
    public void delList(DelListBody idList) {
        for(String id : idList.getList()) {
            companystockholderRepository.delete(id);
        }
    }

    @Override
    public void modify(CompanyStockholderModVo companystockholderModVo){
        CompanyStockholderEntity companystockholderEntity = companystockholderRepository.findOne(companystockholderModVo.getId());

        if (companystockholderEntity == null) {
            throw new CommonServiceException(ApiResponseCode.DATA_INCORRECT.getCode(), "没有对应信息");
        }
        BeanUtils.copyProperties(companystockholderModVo, companystockholderEntity);
        companystockholderEntity.setUpdateTime(new Date());
        companystockholderRepository.save(companystockholderEntity);
    }
}
